/**
 * @author hai.jiang
 * @date 2022-02-17
 * @description 进行路由配置定义和路由拦截、路由插件全局
 */
// 路由插件注册
import Vue from 'vue'
import Router from 'vue-router'
import store from '../store'

Vue.use(Router)

// 引入路由页面组件 -- 地址有四种：./当前文件的目录开始，../ 上一级目录，/ 指下一级目录，什么都不带指服务根目录(项目目录)常常再node_modules中进行模块查找
import NotFound from '../views/common/NotFound'
import Login from '../views/login'
import Register from '../views/login/register'
import Home from '../views/home'
import Detail from '../views/home/detail'
import Mine from '../views/mine'
import MineSeller from '../views/mine/seller'
import MyInfo from '../views/mine/profile'
import Message from '../views/message'
import Dialog from '../views/message/dialog'
import Videos from '../views/videos'

// 路由实例化 和 路由模式指定 路由配置
const meta = {
  noLogin: true
}
const router = new Router({
  // 路由模式
  mode: 'history',

  // 路由配置
  routes: [
    // 默认路由
    {
      path: '/',
      redirect: '/login'
    },

    // 正常页面路由
    {
      path: '/login',
      component: Login,
      meta
    }, {
      path: '/register',
      component: Register,
      meta
    },
    {
      path: '/home',
      component: Home,
      meta
    },
    {
      path: '/detail',
      component: Detail,
      name: 'detail',
    },
    {
      path: '/message',
      component: Message
    }, 
    {
      path:'/message/dialog/:id',
      component: Dialog,
      name:'dialog',
    },
    {
      path: '/mine',
      component: Mine,
      meta
    }, {
      path: '/videos',
      component: Videos
    }, {
      path:'/mine/seller',
      component: MineSeller,
      meta
    }, {
      path: '/mine/info',
      component: MyInfo
    },

    // 如果用户输入了一个不存在的地址，如何处理？-- 所有的路由都没有匹配上，那么这个就是最后的选择
    {
      path: '*',
      component: NotFound,
      meta: {
        noLogin: true
      }
    }
  ]
})

// 做用户登录拦截 -- beforeEach函数接收的是一个路由拦截回调方法
router.beforeEach(function (to, from, next) {

  // 判断要去的页面是否需要登录 -- 取meta值
  let noLogin = to.meta.noLogin
  // 如果不需要登录，那么直接跳转业务
  if (noLogin) {
    next()
  } else {
    const token = store.getters['common/getToken']

    // 如果存在则执行跳转业务，否则重定向到登录页面--/login
    if (!!token) {
      next()
    } else {
      // 执行重定向
      next('/login')
    }
  }
})

export default router
